Programmierung von CAx-Systemen

David Straub

CAx-Programmierung – D. Straub

Ziel dieser Lehrveranstaltung

Die Studierenden erwerben ein fundiertes Verständnis der geometrischen Grundlagen der 3D-Modellierung sowie der algorithmischen Erzeugung und Optimierung von CAD-Geometrien.

Sie lernen, parametrische Modelle mithilfe geeigneter Programmiersprachen oder Skriptumgebungen zu erstellen, modellierungsrelevante Abläufe zu automatisieren und bestehende Workflows hinsichtlich Effizienz und Robustheit zu verbessern.

Zudem entwickeln sie Kompetenzen im Zusammenspiel von skriptbasierter Geometrieerzeugung und grafischen CAD-Umgebungen.

Modulhandbuch SoSe 2026, TBM 2.2

CAx-Programmierung – D. Straub

Organisatorisches

  • Termine (4 SWS):
    • SU Donnerstag 9:00-10:30 Uhr, B158
    • Ü Donnerstag 10:45-12:15 Uhr, B356
  • Hardware: eigenes Laptop oder Laborrechner
  • Prüfung: schriftlich, 90 Minuten
CAx-Programmierung – D. Straub

Motivation

CAx-Programmierung – D. Straub

Parametrische Modellierung: warum überhaupt?

Direkte Modellierung

  • Geometrie wird manuell geformt (Push/Pull)
  • Feste Koordinaten, keine Historie

Parametrische Konstruktion

  • Rezept statt Endprodukt: Form aus Variablen und Beziehungen
  • Design Intent (Konstruktionsabsicht): Regeln definieren Geometrie
  • Parameter ändern → Modell berechnet sich neu
  • Ideal für Variantenmanagement und Produktfamilien
CAx-Programmierung – D. Straub

Parametrische Moellierung: warum Code statt Maus?

Problem: CAD-GUI-Modellierung

  • Keine Nachvollziehbarkeit (Wer hat was wann geändert?)
  • Wiederholaufgaben manuell → fehleranfällig
  • Variantenbildung = viele Dateien kopieren
  • Design-Optimierung nur durch Trial & Error

Lösung: Code-basierte CAD-Konstruktion

  • Versionsverwaltung (Git)
  • Automatisierung von Wiederholaufgaben
  • Algorithmische Optimierung
CAx-Programmierung – D. Straub

Versionsverwaltung

Klassische CAD-Dateien (binär):

  • gehaeuse_v1.sldprt, gehaeuse_v2_final.sldprt, gehaeuse_v2_wirklich_final.sldprt
  • Keine Änderungshistorie sichtbar
  • Merge-Konflikte unlösbar

Code-basierte CAD-Modelle (Text):

# Änderung nachvollziehbar in Git:
- breite = 100  # alt
+ breite = 120  # neu
  • Vollständige Historie aller Änderungen
  • Branching: Parallele Varianten entwickeln
  • Teamarbeit: Mehrere Teammitglieder, ein Modell
CAx-Programmierung – D. Straub

Automatisierung

Szenario: 200 Schrauben in Normgrößen

for durchmesser in [3, 4, 5, 6, 8, 10, ...]:
    schraube = erzeuge_schraube(durchmesser, laenge)
    exportiere(f"ISO4762_M{durchmesser}.step")
  • Fehlerfrei, da einmal programmiert
  • Reproduzierbar auf Knopfdruck
CAx-Programmierung – D. Straub

Algorithmische Optimierung

result = minimize(
    fun=berechne_masse,
    x0=[wandstaerke, rippenabstand],
    constraints={'type': 'ineq', 'fun': lambda x: festigkeit(x) - 500}
)
# Finde minimale Masse bei Festigkeit ≥ 500 MPa
  • Hunderte Varianten automatisch durchrechnen
  • Optimales Design mathematisch finden
CAx-Programmierung – D. Straub

Beispiel: Fusionsreaktor

Link

CAx-Programmierung – D. Straub

KI-CAD

  • KI-generierte Geometrie aus Textbeschreibung
  • Beispielanwendung: “Reverse Engineering CAD Code from Point Clouds” arXiv:2412.14042
CAx-Programmierung – D. Straub

Warum Python?

  • Nicht CAD-spezifisch, sondern Allzweck-Programmiersprache, bekannt aus Informatik 1
  • Derzeit weltweit beliebteste Programmiersprache
  • Plattformunabhängig: läuft auf Windows, Linux, macOS
  • Quelloffen und kostenlos
CAx-Programmierung – D. Straub

Gliederung

  1. Einführung
  2. Topologie
  3. Geometrie
  4. Modellierungsstrategien
  5. Datenaustausch
  6. Simulation
  7. Optimierung
  8. Fertigung
CAx-Programmierung – D. Straub

Einführung

  • Motivation
  • Darstellung von Geometrie in CAD-Systemen
  • Geschichtlicher Exkurs: Open-Source-CAD-Programmierung
  • Moderner Python-CAD-Stack
CAx-Programmierung – D. Straub

Darstellung von Geometrie in CAD-Systemen

Dreidimensionale Geometrie kann in CAD-Systemen auf verschiedene Arten dargestellt werden:

  • CSG (Constructive Solid Geometry): Volumen durch boolesche Operationen einfacher Körper
  • B-Rep (Boundary Representation): Oberfläche definiert Volumen, Kanten definieren Flächen
  • Drahtgitter (Mesh): Oberfläche aus Polygonen, z.B. Dreiecken
CAx-Programmierung – D. Straub

CSG (Constructive Solid Geometry)

Konstruktive Festkörpergeometrie

  • Modellierung durch boolesche Operationen (Union, Intersection, Difference)
  • Basiert auf einfachen Grundkörpern (Würfel, Zylinder, Kugel, Kegel)
  • Hierarchische Struktur als CSG-Baum
  • Vorteil: Kompakte Darstellung, einfache Modifikation
  • Nachteil: Begrenzte geometrische Komplexität
CAx-Programmierung – D. Straub

B-Rep (Boundary Representation)

Begrenzungsflächenmodell

  • Geometrie durch Oberfläche beschrieben
  • Hierarchie: Faces (Flächen), Edges (Kanten), Vertices (Ecken)
  • Verwendet Splines für gekrümmte Flächen
  • Vorteil: Hohe Präzision, komplexe Formen möglich
  • Nachteil: Größerer Speicherbedarf, komplexe Datenstrukturen
  • Standard in professionellen CAD-Systemen
CAx-Programmierung – D. Straub

Mesh (Netz)

Polygonnetz-Darstellung

  • Oberfläche aus Dreiecken oder Vierecken
  • Keine exakte Geometrie, nur Annäherung
  • Anwendungen: 3D-Scanning, 3D-Druck (STL), FEM, Visualisierung
  • Vorteil: Einfache Darstellung, schnelle Visualisierung
  • Nachteil: Keine parametrische Bearbeitung, speicherintensiv
CAx-Programmierung – D. Straub

Geschichtlicher Exkurs: Open-Source-CAD-Programmierung

CAx-Programmierung – D. Straub

OpenSCAD

Erste Open-Source-CAD-Skripting-Software (2010)

  • Verwendet eine eigene Skriptsprache
  • Basiert auf CSG (Constructive Solid Geometry)
  • Kein Export in Standard-CAD-Formate wie STEP
CAx-Programmierung – D. Straub

Open CASCADE Technology (OCCT)

Open-Source-CAD-Kernel (1999)

  • C++-Bibliothek für geometrische Modellierung und Visualisierung
  • Basiert auf B-Rep
  • Grundlage für viele quelloffene und kommerzielle CAD-Systeme
  • Lizenz: LGPL (frei nutzbar, auch kommerziell)
CAx-Programmierung – D. Straub

FreeCAD

Open-Source-CAD-Software (2002)

  • Basiert auf OCCT als Geometrie-Kernel
  • GUI-basierte parametrische 3D-Modellierung
  • Python-API für Skripting und Automatisierung
  • Export in STEP, STL und andere Formate
  • Plattformunabhängig (Windows, Linux, macOS)
CAx-Programmierung – D. Straub

CadQuery 1.0

Python-Bibliothek für parametrisches CAD (2012)

  • Erste Code-first-Bibliothek für Python-basierte CAD-Modellierung
  • Implementiert als Plugin für FreeCAD
CAx-Programmierung – D. Straub

CadQuery 2

Python-Bibliothek für parametrisches CAD (2020)

  • Neuimplementierung von CadQuery als direkter Wrapper um OCCT (ohne FreeCAD-Abhängigkeit)
  • Erweiterte B-Rep-Funktionalität
  • Integration mit Jupyter Notebooks
CAx-Programmierung – D. Straub

Build123d

Python-Bibliothek für parametrisches CAD (2022)

  • Entwickelt als Alternative zu CadQuery 2 mit veränderter Syntax
  • Basiert ebenfalls auf OCCT
  • Geometrie-Objekte können mit CadQuery-Code ausgetauscht werden
CAx-Programmierung – D. Straub

Fazit: moderner Python-CAD-Stack

  • OCCT als Geometrie-Kernel
  • CadQuery 2 oder Build123d als Python-Bibliotheken für parametrische Modellierung

Visualisierungs-Tools:

  • Jupyter-CadQuery für interaktive Visualisierung in Jupyter Notebooks
  • OCP CAD Viewer for VS Code für interaktive Visualisierung in Visual Studio Code
CAx-Programmierung – D. Straub

Demo: unsere erste CAD-Geometrie in Python (build123d-Version)

import jupyter_cadquery
import build123d as bd

length = 80
width = 60
height = 10

base = bd.Box(length, width, height)
hole = bd.Cylinder(radius=width / 4, height=height)
part = base - hole

top_f = part.faces().sort_by(bd.Axis.Z).last
hole_edges = top_f.edges().filter_by(bd.GeomType.CIRCLE)
result = part.fillet(radius=2, edge_list=hole_edges)

result
CAx-Programmierung – D. Straub

Demo: unsere erste CAD-Geometrie in Python (CadQuery-Version)

import jupyter_cadquery
from cadquery import func as cf

length = 80
width = 60
height = 10

base = cf.box(length, width, height)
hole = cf.cylinder(d=width / 2, h=height)
part = base - hole

top_f = part.faces(">Z")
hole_edge = top_f.edges("%CIRCLE")
result = part.fillet(2.0, [hole_edge])

result
CAx-Programmierung – D. Straub

Zusammenfassung

  • Parametrische Modellierung mit Code: Versionsverwaltung, Automatisierung, Optimierung
  • Python als CAD-Sprache: Allzweck, plattformunabhängig, weit verbreitet
  • Drei Geometrie-Darstellungen: CSG, B-Rep, Mesh
    • CSG: keine Freiformflächen, nicht allgemein genug
    • B-Rep: Standard in professionellen CAD-Systemen -> von uns verwendet
    • Mesh: für 3D-Druck (CAM) und Finite-Elemente-Simulation (CAE) relevant, nicht für Konstruktion
  • OCCT: Open-Source-Kernel mit B-Rep
  • CadQuery 2 und Build123d: Moderne Python-Bibliotheken für parametrisches CAD
CAx-Programmierung – D. Straub

Programmierung von CAx-Systemen

Übung 1

David Straub

CAx-Programmierung – D. Straub

Einrichten der Python-Executable

  • KCA-Rechner: Download von WinPython 3.13, entpacken ins Benutzerverzeichnis, z.B. C:\Users\hm-abcd12ef
  • Windows: Download des Python Install Managers (Achtung: nicht Installers!)
  • macOS: Download des Python Installers
  • Debian/Ubuntu: sudo apt install python python3-pip python3-venv

Test: in der Python-Eingabeaufforderung

import sys
print(sys.executable)
CAx-Programmierung – D. Straub

Einrichten einer virtuellen Umgebung

Im Verzeichnis, in dem die virtuelle Umgebung angelegt werden soll, z.B. im Benutzer-Verzeichnis:

  • Windows: python -m venv cax-env
  • macOS/Linux: python3 -m venv cax-env

Aktivieren der virtuellen Umgebung:

  • Windows: cax-env\Scripts\activate
  • macOS/Linux: source cax-env/bin/activate
CAx-Programmierung – D. Straub

Installieren der benötigten Python-Pakete

python -m pip install jupyterlab cadquery build123d jupyter-cadquery ocp-vscode
CAx-Programmierung – D. Straub

Test der Jupyter-Installation

  • jupyter lab
  • Neues Notebook erstellen und speichern, z.B. test.ipynb
import jupyter_cadquery
import build123d as bd

bd.Box(30, 20, 10)
import jupyter_cadquery
from cadquery import func as cq_func

cq_func.box(30, 20, 10)
CAx-Programmierung – D. Straub

Einrichten des OCP-CAD-Viewers in Visual Studio Code

Hinweise:

  • OCP ist der Python-Wrapper um OCCT, auf dem CadQuery und Build123d basieren
  • Jupyter-CadQuery basiert auf dem Kern des OCP-CAD-Viewers
CAx-Programmierung – D. Straub

Einrichten von Python in VS Code und Test

  • Select Python Interpreter -> cax-env\Scripts\python.exe (Windows) oder cax-env/bin/python (macOS/Linux)
  • File -> New -> Jupyter Notebook
import jupyter_cadquery
import build123d as bd

bd.Box(30, 20, 10)
CAx-Programmierung – D. Straub

Aufgabe: LEGO-Stein (Außenhülle)

CAx-Programmierung – D. Straub

Grundkörper: Box

import build123d as bd

bd.Box(length=30, width=20, height=10)
  • Erzeugt einen Quader mit den angegebenen Maßen in mm
  • Der Mittelpunkt liegt im Ursprung (0, 0, 0)
  • Parameter können auch ohne Namen angegeben werden: bd.Box(30, 20, 10)
CAx-Programmierung – D. Straub

Grundkörper: Cylinder

bd.Cylinder(radius=5, height=20)
  • Erzeugt einen Zylinder mit dem angegebenen Radius und der Höhe
  • Achse entlang der Z-Achse, Mittelpunkt im Ursprung
CAx-Programmierung – D. Straub

Positionierung: Pos()

zylinder = bd.Cylinder(radius=5, height=10)

bd.Pos(15, 0, 5) * zylinder
  • Pos(x, y, z) definiert eine Position im Raum (in mm)
  • Der *-Operator platziert den Körper an dieser Position
  • Der Original-Körper bleibt unverändert
CAx-Programmierung – D. Straub

Boole'sche Operationen

vereinigung = quader + zylinder   # Vereinigung (Union)
differenz   = quader - zylinder   # Differenz (Difference)
schnitt     = quader & zylinder   # Schnitt (Intersection)
  • Operationen erzeugen jeweils einen neuen B-Rep-Körper
CAx-Programmierung – D. Straub